package com.aug_leo.datastructure.deque;

/**
 * 双端队列接口
 *
 * @param <E> 队列中元素类型
 */
public interface Deque<E> {

    /**
     * 在队列头部插入元素
     *
     * @param e 要插入的元素
     * @return 如果成功插入，则返回true， 否则返回 false
     */
    boolean offerFirst(E e);

    /**
     * 在队列尾部插入元素
     *
     * @param e 要插入的元素
     * @return 如果成功插入，则返回true, 否则返回 false
     */
    boolean offerLast(E e);

    /**
     * 移除并返回队列头部的元素
     *
     * @return 队列头部的元素，队列为空返回 null
     */
    E pollFirst();

    /**
     * 移除并返回队列尾部的元素
     *
     * @return 队列尾部的元素，队列为空返回 null
     */
    E pollLast();

    /**
     * 获取但不移除队列头部的元素
     *
     * @return 队列头部的元素，队列为空返回 null
     */
    E peekFirst();

    /**
     * 获取但不移除队列尾部的元素
     *
     * @return 队列尾部的元素，队列为空返回 null
     */
    E peekLast();

    /**
     * 判断队列是否为空
     *
     * @return 如果队列为空，则返回true，否则返回false
     */
    boolean isEmpty();

    /**
     * 判断队列是否已满
     * 注意：对于不支持容量限制的队列实现，此方法始终返回false
     *
     * @return 如果队列已满，则返回true，否则返回false
     */
    boolean isFull();
}
